home *** CD-ROM | disk | FTP | other *** search
- #include "crtlocal.h"
- #include <sys/types.h>
- #include <sys/stat.h>
-
- int mknod(const char *name, mode_t flags, dev_t device)
- {
- OSErr err;
- FInfo info;
- int fd,refnum;
- HParamBlockRec pb;
- FSSpec name1 = hfs_canon(crt_parID, name, 1);
- if (!*name1.name) return -1;
- pb.ioParam.ioNamePtr = name1.name;
- pb.ioParam.ioVRefNum = name1.vRefNum;
- pb.fileParam.ioDirID = name1.parID;
- err = errtran(PBHCreateSync(&pb));
- if (!err)
- {
- err = errtran(FSpGetFInfo(&name1, &info));
- if (!err)
- {
- info.fdType = (flags & 0xFFFF)*0x10001;
- info.fdFldr = device;
- err = errtran(FSpSetFInfo(&name1, &info));
- }
- return err?-1:0;
- }
- }
-
- int chmod(const char *name, mode_t flags)
- {
- OSErr err;
- FInfo info;
- FSSpec name1 = hfs_canon(crt_parID, name, 1);
- if (!*name1.name) return -1;
- err = errtran(FSpGetFInfo(&name1, &info));
- if (!err)
- {
- #if 1
- if (info.fdType ==
- (info.fdType&0xFFFF)*0x10001)
- {
- info.fdType &= ~0x0FFF0FFF;
- info.fdType |= (flags & 07777)*0x10001;
- }
- else
- #endif
- info.fdType = (S_IFREG|(flags & 07777))*0x10001;
- err = errtran(FSpSetFInfo(&name1, &info));
- }
- return err?-1:0;
- }
-
- int chown(const char *name, uid_t owner, gid_t group)
- {
- OSErr err;
- FInfo info;
- FSSpec name1 = hfs_canon(crt_parID, name, 1);
- if (!*name1.name) return -1;
- err = errtran(FSpGetFInfo(&name1, &info));
- if (!err)
- {
- info.fdCreator = (owner<<16)|(group&0xFFFF);
- err = errtran(FSpSetFInfo(&name1, &info));
- }
- return err?-1:0;
- }
-